package com.atguigu.gmall.common.handler;

import com.atguigu.gmall.common.bean.ResponseVo;
import com.atguigu.gmall.common.exception.GmallUserException;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
//Controller接口访问出现异常时 如果异常被异常处理器的Handler匹配到 则由handler的方法处理并返回结果
//所有的管理系统都遵循rest风格：  http+json
@RestControllerAdvice
@Slf4j
public class GlobalExceptionHandler {
    @ExceptionHandler(Exception.class)
    public ResponseVo exception(Exception e){
        log.error("出现异常:{}", ExceptionUtils.getStackTrace(e));
        return ResponseVo.fail("服务器内部错误");
    }
    //自定义类型异常的处理器
    @ExceptionHandler(GmallUserException.class)
    public ResponseVo exception(GmallUserException e){
        log.error("出现异常:{}", ExceptionUtils.getStackTrace(e));
        return ResponseVo.fail()
                .code(e.getCode())
                .msg(e.getMsg());
    }
}
